دسته بندی ها
23:05 1398/07/18

جابه جایی سطر و ستون در Sql Server

مشخصات سوال کننده :
کاربر : hamid_b     امتیاز کاربر : 518     رتبه کاربر : 4
دسته بندی : Sql Server MySql Access Oracle

به این سوال امتیاز بدهید    1
تعداد بازدید این سوال : 6005
هوش مصنوعی

پاسخ هوش مصنوعی

برای جابجایی سطرها به عنوان ستون ها در SQL Server، می توانید از دستور `PIVOT` استفاده کنید. در این حالت، شما می خواهید که تاریخ ها به عنوان سطرها و شیفت های کاری به عنوان ستون ها (A، B، C و D) نمایش داده شوند. در اینجا یک کویری نمونه برای این کار ارایه شده است:


SELECT 
    shamsiDate,
    ISNULL([A], 'خیر') AS A,
    ISNULL([B], 'خیر') AS B,
    ISNULL([C], 'خیر') AS C,
    ISNULL([D], 'خیر') AS D
FROM 
    Plane_Tbl
PIVOT
(
    MAX(shiftDesc) 
    FOR shiftDesc IN ([A], [B], [C], [D])
) AS PivotTable
ORDER BY shamsiDate;

در این کویری:

  • از `MAX(shiftDesc)` برای تعیین اینکه آیا شیفت های کاری وجود دارند یا خیر استفاده می شود.
  • از `FOR shiftDesc IN ([A], [B], [C], [D])` برای مشخص کردن نام ستون ها استفاده می شود.
  • در نهایت با `ISNULL` بررسی می شود که اگر شیفتی وجود نداشته باشد، 'خیر' نمایش داده شود.

این کویری در نهایت تاریخ ها را به عنوان سطر و شیفت ها را به عنوان ستون های مربوطه نمایش می دهد.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : saedbfd 23:24 1398/07/26

سلام

شما میتونید از دستور Pivot در Sql Server استفاده کنید. به صورت غیر Pivot هم می تونید این کار رو انجام بدید. من یک قطعه کد رو براتون قرار می دم.

 

select PD.shamsiDate,
IsNull((Select PD_A.ShiftDesc From Plane_Tbl PD_A Where ShiftDesc = 1 And PD_A.shamsiDate = pd.shamsiDate),'استراحت') As shiftA,
IsNull((Select PD_B.ShiftDesc From Plane_Tbl PD_B Where ShiftDesc = 2 And PD_B.shamsiDate = pd.shamsiDate),'استراحت') As shiftB,
IsNull((Select PD_C.ShiftDesc From Plane_Tbl PD_C Where ShiftDesc = 3 And PD_C.shamsiDate = pd.shamsiDate),'استراحت') As shiftC,
IsNull((Select PD_D.ShiftDesc From Plane_Tbl PD_D Where ShiftDesc = 4 And PD_D.shamsiDate = pd.shamsiDate),'استراحت') As shiftD

From Plane_Tbl PD Group By shamsiDate

به این صورت می تونید عمل جابه جایی سطر و ستون رو انجام بدید.

موفق باشید

به این پاسخ امتیاز بدهید    1
امتیاز: 1664 رتبه: 1
پاسخ دهنده : reza001364 23:24 1398/07/26

این دستور یکم سرعتش از subquery بیشتر هستش فک کنم به کارتون بیاد

select id , [Date],
Count (case when [shift] = 'A' then  1 end) As [A],
Count (case when [shift] = 'B' then  1 end) As [B],
Count (case when [shift] = 'C' then  1 end) As [C],
Count (case when [shift] = 'D' then  1 end) As [D]

                

from TTT

Group by id , [Date]
ویرایش شده در جمعه 11 مهر 1399 ساعت 01:34:36
به این پاسخ امتیاز بدهید    0
امتیاز: 35 رتبه: 22
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود